package com.hzhh123;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

import org.junit.Test;

public class TestStream {
	/**
	 * 创建stream
	 */
	@Test
	public void test1() {
		List<Integer>aList=Arrays.asList(10,20,30);
		aList.stream().forEach(System.out::println);
		//获取并行流
		Stream<Integer>parallelStream=aList.parallelStream();
		//数组获取流
		Integer[] ids=new Integer[10];
		Stream<Integer> stream = Arrays.stream(ids);
		
		//静态方法获取流
		Stream<Integer> of = Stream.of(10,20,30);
		
		//创建无限流
		//迭代
		Stream<Integer>stream1=Stream.iterate(0, (x)->x+2).limit(10);
		stream1.forEach(System.out::println);
		
		//生成
		Stream<Double>doubleStream=Stream.generate(Math::random).limit(2);
		doubleStream.forEach(System.out::println);
	}
	
	//2. 中间操作
	List<Employee>employees=Arrays.asList(
			new Employee(1,"张三",16,23898.00),
			new Employee(2,"李四",38,12898.00),
			new Employee(2,"李四",38,12898.00),
			new Employee(2,"李四",38,12898.00),
			new Employee(2,"李四",38,12898.00),
			new Employee(3,"王五",48,3898.00)
			);
	
	/*
	  筛选与切片
		filter——接收 Lambda ， 从流中排除某些元素。
		limit——截断流，使其元素不超过给定数量。
		skip(n) —— 跳过元素，返回一个扔掉了前 n 个元素的流。若流中元素不足 n 个，则返回一个空流。与 limit(n) 互补
		distinct——筛选，通过流所生成元素的 hashCode() 和 equals() 去除重复元素
	 */
	@Test
	public void test2() {
		employees.stream().filter((e)->{
			System.out.println("输出年龄大于18的员工");
			return e.getAge()>18;
		}).forEach(System.out::println);
	}
	@Test
	public void test3() {
		employees.stream().limit(2).forEach(System.out::println);
	}
	@Test
	public void test4() {
		employees.stream().limit(2).skip(1).forEach(System.out::println);
	}
	@Test
	public void test5() {
		employees.stream().distinct().forEach(System.out::println);
	}
}
